使用 Node Exporter + Docker 化 Prometheus 监控 Linux 主机指标
本教程将指导您通过 Node Exporter(部署在真实主机)和 Prometheus(Docker 容器)监控 Linux 主机的 CPU、内存、磁盘等核心指标。
一、架构说明
组件 | 部署位置 | 功能描述 | 端口 | 通信方向 |
---|---|---|---|---|
Node Exporter | Linux 主机 | 收集并暴露系统指标 | 9100 | ← 提供指标 |
Prometheus | Docker 容器 | 抓取、存储和查询指标数据 | 9090 | → 抓取指标 |
Grafana (可选) | Docker 容器 | 数据可视化 | 3000 | → 查询 Prometheus |
数据流向:
Linux 主机 (Node Exporter) → Prometheus (Docker) → Grafana (可视化)
端口关系图:
graph LR A[Linux 主机:9100] --> B[Prometheus:9090] B --> C[Grafana:3000]
二、操作步骤
1. 在 Linux 主机上部署 Node Exporter
# 下载最新版 Node Exporter (替换版本号)
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
# 解压并安装
tar xvf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
# 验证是否运行 (端口 9100)
curl http://localhost:9100/metrics
2. 准备 Prometheus 配置文件
创建目录存放配置:
mkdir -p ~/prometheus/config
编辑配置文件 ~/prometheus/config/prometheus.yml
:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node-exporter"
static_configs:
- targets: ["主机IP:9100"] # 替换为您的Linux主机IP
重要:将
主机IP
替换为宿主机的实际 IP(可通过ip a
查看),不要使用localhost
或127.0.0.1
。
3. 使用 Docker 启动 Prometheus
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v ~/prometheus/config:/etc/prometheus \
prom/prometheus
4. 验证服务
Node Exporter:浏览器访问
http://<主机IP>:9100/metrics
Prometheus:访问
http://<主机IP>:9090/targets
在 Prometheus 的 Targets 页面应看到
node-exporter
状态为 UP
三、防火墙配置(若启用)
# 开放 Node Exporter 端口
sudo ufw allow 9100
# 开放 Prometheus 端口
sudo ufw allow 9090
四、常用监控指标说明
指标名称 | 含义 |
---|---|
node_cpu_seconds_total |
CPU 使用时间 |
node_memory_MemFree_bytes |
空闲内存 |
node_filesystem_avail_bytes |
磁盘可用空间 |
node_load1 |
1分钟系统负载 |
node_network_receive_bytes |
网络接收流量 |
五、可选:Grafana 可视化
- 启动 Grafana 容器:
docker run -d --name=grafana -p 3000:3000 grafana/grafana
- 访问
http://<主机IP>:3000
,默认账号/密码:admin/admin
- 添加数据源:选择 Prometheus,URL 填
http://主机IP:9090
- 导入 Node Exporter 仪表盘:
- 使用 ID 1860(Node Exporter Full)
- 或手动上传 JSON 模板
六、故障排查
Prometheus 显示 Target Down:
- 检查主机 IP 是否正确(用
ip a
确认) - 验证能否从 Docker 主机访问 Node Exporter:
docker run --rm curlimages/curl http://<主机IP>:9100/metrics
- 检查防火墙规则
- 检查主机 IP 是否正确(用
指标无数据:
- 在 Prometheus Web 输入
up{job="node-exporter"}
查看状态 - 检查 Node Exporter 日志:
journalctl -u node_exporter -f
- 在 Prometheus Web 输入
最终效果
Prometheus Targets 页面显示 UP 状态
Grafana 可视化主机指标
通过此方案,您已实现:
✅ 主机级指标实时采集
✅ 容器化 Prometheus 部署
✅ 集中式监控数据存储
✅ 可视化仪表盘(Grafana)
后续可扩展监控其他服务(MySQL/Nginx 等),只需在 Prometheus 中添加新的 Job 配置即可。